﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
 * 委托的作用：
 *            如果要把方法作为函数来进行传递的话，就要用到委托。
 *            简单来说，委托是一个类型，这个类型可以赋值一个方法的引用。
 *            C#的委托通过 delegate 关键字来声明
 * 声明委托：
 *            1、delegate void MyDelegate1(int x)
 *            2、delegate void MyDelegate2<T>(T x)
 * 使用委托“
 *            1、MyDelegate1 mydelegate=new MyDelegate1(func)
 *            2、MyDelegate1 mydelegate=func
 */
public class TestDelegate : MonoBehaviour
{
    public delegate void ShowDelegate();
    public delegate void ShowDelegate2(int a,int b);
    public delegate int ShowDelegate3();
    public delegate void ShowDelegate4<T>(T a);
    // Start is called before the first frame update
    void Start()
    {
        ShowDelegate show = Show1;
        show();
        show.Invoke();

        ShowDelegate2 show2 = Show2;
        show2(1,2);
        show2.Invoke(2,2);

        ShowDelegate3 show3 = Show3;
        show3();
        Debug.Log("Show3:" + show3());

        ShowDelegate4<string> show4 = Show4;
        show4("hallo");
        show4("hallo123");
    }
    private void Show1()
    {
        Debug.Log("Show1");
    }
    private void Show2(int a,int b)
    {
        Debug.Log("Show2:"+a*b);
    }
    private int Show3()
    {
        return 100;
    }
    private void Show4(string a)
    {
        Debug.Log("Show4:" + a);
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}
